package com.ideaaedi.commonds.validate;

import com.ideaaedi.commonds.exception.ValidateException;

import java.util.function.Function;
import java.util.function.Supplier;

/**
 * 校验器
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 2022/5/17 14:15
 */
public interface Validator<T> {
    
    /**
     * 校验
     *
     * @throws ValidateException 校验不通过时抛出
     */
    void validate() throws ValidateException;
    
    /**
     * 校验
     *
     * @param supplier
     *            待校验的数据
     * @throws ValidateException 校验不通过时抛出
     */
    void validate(Supplier<T> supplier) throws ValidateException;
    
    /**
     * 校验
     *
     * @param supplier
     *            待校验的数据
     * @param function
     *            校验逻辑
     * @throws ValidateException 校验不通过时抛出
     */
    void validate(Supplier<T> supplier, Function<T, Boolean> function) throws ValidateException;
    
    /**
     * 校验
     *
     * @return 是否通过限制校验
     */
    boolean validateAndGet();
    
    /**
     * 校验
     *
     * @param supplier
     *            待校验的数据
     * @return 是否通过校验器
     */
    boolean validateAndGet(Supplier<T> supplier);
    
    /**
     * 校验
     *
     * @param supplier
     *            待校验的数据
     * @param function
     *            校验逻辑
     * @return 是否通过校验器
     */
    boolean validateAndGet(Supplier<T> supplier, Function<T, Boolean> function);
}
